package trabajo.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


import trabajo.modelo.Cancha;
import trabajo.modelo.Horario;
import trabajo.modelo.Local;
import trabajo.util.ConexionBD;
import trabajo.excepcion.DAOExcepcion;


public class CanchaDAO extends BaseDAO {
	

	public Cancha obtener(int _idCancha) throws DAOExcepcion {
		System.out.println("CanchaDAO: obtener(int _idCancha)");
		Cancha cancha = new Cancha();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from cancha where idCancha = ?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, _idCancha);
			rs = stmt.executeQuery();
			if (rs.next()) {
				cancha.setIdCancha(rs.getInt("idCancha"));
				cancha.setIdLocal(rs.getInt("idLocal"));
				cancha.setNombre(rs.getString("nombre"));
				cancha.setDescripcion(rs.getString("descripcion"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return cancha;
	}

	
	
	public Collection<Cancha> listar() throws DAOExcepcion {
		System.out.println("CanchaDAO: listar()");
		Collection<Cancha> c = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select * from cancha ";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha ca = new Cancha();
				ca.setIdCancha(rs.getInt("idcancha"));
				ca.setNombre(rs.getString("nombre"));
				ca.setDescripcion(rs.getString("descripcion"));
				c.add(ca);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}


	public Collection<Cancha> listar(String _nombre) throws DAOExcepcion {
		
		return null;
	}
	
	public List<Cancha> buscarCancha(int idLocal, String fecha, String inicio, String disponible) throws DAOExcepcion {
		System.out.println("CanchaDAO: buscarCancha(int idlocal, string fecha, String inicio, String disponible)");		
		
		List<Cancha> listaCancha = new ArrayList<Cancha>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			String query = "select * " +
					"from cancha as c " + 
					"where c.idcancha = c.idcancha ";
					//"and h.disponible = ? " +
					//"and h.fecha = ? "+
					//"and h.inicio = ? ";
					if (idLocal > 0){
						query +=	" and c.idlocal = ? ";
						}
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			/*
			if(disponible == true){
				stmt.setString(1, "S");
			}else{
				stmt.setString(1, "N");
			}
			*/
			//stmt.setString(2, fecha);
			//stmt.setString(3, fecha + " " +inicio);
			if (idLocal > 0)
				stmt.setInt(1, idLocal);
			
			
			System.out.println(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha cancha = new Cancha();
				
				cancha.setIdCancha(rs.getInt("idCancha"));				
				cancha.setIdLocal(rs.getInt("idLocal"));
				cancha.setNombre(rs.getString("nombre"));				
								
				listaCancha.add(cancha);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listaCancha;
	}
	
	 public void registrar(Cancha _cancha) throws DAOExcepcion {
			System.out.println("CanchaDAO: registrarCancha(Cancha _cancha)");
			
			ResultSet rs = null;
			Connection con = null;
			PreparedStatement stmt = null;
			
			
			
			try {
				con = ConexionBD.obtenerConexion();
				String query;
	                       
				//insertando cancha
				query = "insert into cancha (idlocal, nombre, descripcion) VALUES (?, ?, ?)";
				stmt = con.prepareStatement(query);
											
				stmt.setInt(1, _cancha.getIdLocal());
				stmt.setString(2, _cancha.getNombre());
				stmt.setString(3, _cancha.getDescripcion());

				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo Insertar en registro cancha");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}
	
}
